/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package arvoreexemplo;

/**
 *Exemplo de árvore, retirada do livro Java Apredendo a Programar, 6ºEd. Deitel
 * Página 625 a 628
 * @author labt
 */

//definição da classe Tree
public class Tree {
    
    private TreeNode root;
    
    //construtor inicializa uma Tree de inteiros vazia
    public Tree(){
        
        root = null;
    }//fim do construtor sem argumentos Tree
    
    //insere um novo nó na árvore de pesquisa binária
    public void insertNode(int insertValeu){
        
        if(root == null)
            root = new TreeNode(insertValeu);//cria o nó-raiz aqui
        else
            root.insert(insertValeu);//cria o método insert
    }//fim do método insertNode
    
    public void preorderTraversal(){
        
        preorderHelper(root);
    }//fim do método preoderTraversal
    
    private void preorderHelper(TreeNode node){
        
        if(node == null)
            return;
        System.out.printf("%d",node.data);//gera saída de dados do nó
        preorderHelper(node.leftNode);//percorre subárvore esquerda
        preorderHelper(node.rightNode);//percorre subárvore direita
    }//fim do método preoderHelper
    
    //inicia percurso na ordem
    public void inorderTraversal(){
        
        inorderHelper(root);
    }//fim do método inorderTraversal
    
    //método recursivo para realizar percurso na ordem
    private void inorderHelper(TreeNode node){
        
        if(node == null)
            return;
        
        inorderHelper(node.leftNode);//percorre subárvore esquerda
        System.out.printf("%d", node.data);//gera saída de dados do nó
        inorderHelper(node.rightNode);//percorre subárvor direita
    }//fim do método inorderHelper
    
    //inicia percurso na pós-ordem
    public void postorderTraversal(){
        
        postorderHelper(root);
    }//fim do método postorderTraversal
    
    //método recursivo para realizar percurso na pós-ordem
    private void postorderHelper(TreeNode node){
        
        if(node == null)
            return;
        
        postorderHelper(node.leftNode);//percorre subárvore esquerda
        postorderHelper(node.rightNode);//percorre subárvore direita
        System.out.printf("%d", node.data);//gera saída de dados do nó
    }//fim do método postorderHelper
}//fim da classe Tree
